package cliente.empresa

import java.util.Date
import planes.PlanCiudadesAmigas
import planes.PlanHablateTodo
import planes.PlanNumAmigos
import planes.Plan


class Empresa(var clientes :List[Cliente]) {
  
  def getClientes(): List[Cliente] = clientes
  
  def setClientes(clientes :List[Cliente]){
    this.clientes = clientes;
  }
  
  def addClientes(cliente :Cliente){
    this.clientes = cliente :: this.clientes;
  }
  
  def removeCliente(cliente :Cliente){
       var i = this.getClientes.indexOf(cliente);
       this.getClientes.drop(i);
  }
  
 //II) Dado un mes obtener:
 //1) El cliente que mas minutos hablo
 def clienteQueMasHablo(mes : Int): String ={
	 var clienteMasCharleta = this.clientes.head
	 this.clientes.foreach(cliente => if(cliente.llamadaMasLarga().duracion() > clienteMasCharleta.llamadaMasLarga().duracion()){
		 								clienteMasCharleta = cliente
	 })
	 clienteMasCharleta.nombre
 }
 
 //2) El cliente con la factura mas abultada.
 def clienteConLaMayorFactura(mes :Int): String ={
   	 var clienteFacturaMasCara = this.clientes.head
   	 this.clientes.foreach(cliente => if(cliente.montoAFacturarEnMes(mes) > clienteFacturaMasCara.montoAFacturarEnMes(mes)){
		 								 clienteFacturaMasCara = cliente
	 })
	 clienteFacturaMasCara.nombre
 } 
 
 //3) El cliente con mas comunicaciones largas.
  def clienteConMasLlamadasLargas(mes :Int): String ={
   	 var clienteLlamadasLargas = this.clientes.head
   	 this.clientes.foreach(cliente => if(cliente.montoAFacturarEnMes(mes) > clienteLlamadasLargas.montoAFacturarEnMes(mes)){
		 								 clienteLlamadasLargas = cliente
	 })
	 clienteLlamadasLargas.nombre
 } 

  //III) Dado un usuario, elegir el mejor plan para el
  def elegirElMejorPlanPara(cliente : Cliente, mes1 :Int, mes2 :Int, mes3 :Int, numAmigos :List[Int],ciudad :String): String ={
      var client = new Cliente("prueba",cliente.comunicaciones.filter(ll => (ll.getMes() == mes1) || (ll.getMes() == mes2) || (ll.getMes() == mes3)))
      var planes = planesActuales(numAmigos,ciudad)
      var map =  scala.collection.mutable.Map[String,Double]()
      for(plan <- planes){
         var tuple = plan.checkearPrecioParaPlan(client)
           map += (tuple._1 -> tuple._2)
      }
      return devolverPlanParaCliente(map)
  }
  
  
  def devolverPlanParaCliente(map :scala.collection.mutable.Map[String,Double]): String={
      var mejorPlan = map.first
      var plan = mejorPlan._1
      var minPrecio = mejorPlan._2
      for( (k,v) <- map){
    	  if (v < minPrecio){
    		  plan = k
    		  minPrecio = v
    	  }
      }
      return plan
  }
  
  def planesActuales(nums :List[Int],ciudad: String):List[Plan]={
    var planC = new  PlanCiudadesAmigas(ciudad)
    var planH = new  PlanHablateTodo()
    var plan = new  PlanNumAmigos()
      plan.addNumero(nums(0))
      plan.addNumero(nums(1))
      plan.addNumero(nums(2))
      plan.addNumero(nums(3))
      plan.addNumero(nums(4))
    List(planC,planH,plan)
  }
	
}